package org.jsola.hr.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.jsola.core.dto.BaseDTO;
import org.jsola.core.validator.Const;
import org.jsola.hr.constant.FormalTypeEnum;
import org.jsola.hr.constant.PostType;

import java.util.Date;
import java.util.List;

import static org.jsola.hr.example.CheckInPeopleExample.*;

/**
 * 预登记人员
 *
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "新增【预登记人员】的参数")
@Data
public class CheckInPeopleAddDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = N_ANNEX_LEAVING, example = E_ANNEX_LEAVING)
    @Length(max = 200000, message = M_ANNEX_LEAVING_MAX)
    private String annexLeaving;

    @ApiModelProperty(notes = N_POST_TYPE, example = E_POST_TYPE, allowableValues = PostType.VALUES_STR)
    @Const(constClass = PostType.class, message = M_POST_TYPE_ENUM_NOT_MATCH)
    private Integer postType;

    @ApiModelProperty(notes = N_JOIN_DATE, example = E_JOIN_DATE)
    private Date joinDate;

    @ApiModelProperty(notes = N_FORMAL_TYPE, example = E_FORMAL_TYPE, allowableValues = FormalTypeEnum.VALUES_STR)
    @Const(constClass = FormalTypeEnum.class, message = M_FORMAL_TYPE_ENUM_NOT_MATCH)
    private Integer formalType;

    @ApiModelProperty(notes = N_BIRTH_STATUS, example = E_BIRTH_STATUS)
    private Integer birthStatus;

    @ApiModelProperty(notes = N_REG_TYPE, example = E_REG_TYPE)
    private Integer regType;

    @ApiModelProperty(notes = N_NATIVE_LOCATION, example = E_NATIVE_LOCATION)
    @Length(max = 100, message = M_NATIVE_LOCATION_MAX)
    private String nativeLocation;

    @ApiModelProperty(notes = N_BLOOD_GROUP, example = E_BLOOD_GROUP)
    private Integer bloodGroup;

    @ApiModelProperty(notes = N_EMAIL, example = E_EMAIL)
    @Length(max = 64, message = M_EMAIL_MAX)
    private String email;

    @ApiModelProperty(notes = N_CURRENT_LOCATION, example = E_CURRENT_LOCATION)
    @Length(max = 100, message = M_CURRENT_LOCATION_MAX)
    private String currentLocation;

    @ApiModelProperty(notes = N_MARITAL_STATUS, example = E_MARITAL_STATUS)
    private Integer maritalStatus;

    @ApiModelProperty(notes = N_POLITICAL_STATUS, example = E_POLITICAL_STATUS)
    private Integer politicalStatus;

    @ApiModelProperty(notes = N_PROBATION_DAYS, example = E_PROBATION_DAYS)
    private Integer probationDays;

    @ApiModelProperty(notes = N_TURN_STRAIGHT_DATE, example = E_TURN_STRAIGHT_DATE)
    private Date turnStraightDate;

    @ApiModelProperty(notes = N_NAME, example = E_NAME)
    @Length(max = 50, message = M_NAME_MAX)
    private String name;

    @ApiModelProperty(notes = N_PHONE, example = E_PHONE)
    @Length(max = 20, message = M_PHONE_MAX)
    private String phone;

    @ApiModelProperty(notes = N_IDCARD, example = E_IDCARD)
    @Length(max = 18, message = M_IDCARD_MAX)
    private String idcard;

    @ApiModelProperty(notes = N_ID_CARD_FRONT, example = E_ID_CARD_FRONT)
    @Length(max = 20000, message = M_ID_CARD_FRONT_MAX)
    private String idCardFront;

    @ApiModelProperty(notes = N_ID_CARD_BACK, example = E_ID_CARD_BACK)
    @Length(max = 20000, message = M_ID_CARD_BACK_MAX)
    private String idCardBack;

    @ApiModelProperty(notes = N_CHANNEL_ID, example = E_CHANNEL_ID)
    @Length(max = 32, message = M_CHANNEL_ID_MAX)
    private String channelId;

    @ApiModelProperty(notes = N_SOURCE, example = E_SOURCE)
    @Length(max = 20, message = M_SOURCE_MAX)
    private String source;

    @ApiModelProperty(notes = N_STATUS, example = E_STATUS)
    private Integer status;

    @ApiModelProperty(notes = N_REMARK, example = E_REMARK)
    @Length(max = 50, message = M_REMARK_MAX)
    private String remark;

    @ApiModelProperty(notes = N_WORK_STATUS, example = E_WORK_STATUS)
    private Integer workStatus;

    @ApiModelProperty(notes = "创建二维码的租户id")
    private String siteId;

    @ApiModelProperty(notes = "创建二维码的租户userId")
    private String userId;

    @ApiModelProperty(notes = "动态码")
    private String code;

    @ApiModelProperty(notes = N_TYPE, example = E_TYPE, required = true)
    private Integer type;

    @ApiModelProperty(notes = N_NATION, example = E_NATION)
    @Length(max = 50, message = M_NATION_MAX)
    private String nation;

    @ApiModelProperty(notes = N_BIRTHDAY, example = E_BIRTHDAY)
    @Length(max = 20, message = M_BIRTHDAY_MAX)
    private String birthday;

    @ApiModelProperty(notes = N_ADDRESS, example = E_ADDRESS)
    @Length(max = 200, message = M_ADDRESS_MAX)
    private String address;

    @ApiModelProperty(notes = N_ISSUED_BY, example = E_ISSUED_BY)
    @Length(max = 200, message = M_ISSUED_BY_MAX)
    private String issuedBy;

    @ApiModelProperty(notes = N_START_DATE, example = E_START_DATE)
    @Length(max = 20, message = M_START_DATE_MAX)
    private String startDate;

    @ApiModelProperty(notes = N_END_DATE, example = E_END_DATE)
    @Length(max = 20, message = M_END_DATE_MAX)
    private String endDate;

    @ApiModelProperty(notes = N_PHOTO, example = E_PHOTO)
    @Length(max = 200000, message = M_PHOTO_MAX)
    private String photo;

    @ApiModelProperty(notes = N_ANNEX_PERSON_PHOTO, example = E_ANNEX_PERSON_PHOTO)
    @Length(max = 200000, message = M_ANNEX_PERSON_PHOTO_MAX)
    private String annexPersonPhoto;

    @ApiModelProperty(notes = N_ANNEX_ID_CARD, example = E_ANNEX_ID_CARD)
    @Length(max = 200000, message = M_ANNEX_ID_CARD_MAX)
    private String annexIdCard;

    @ApiModelProperty(notes = N_ANNEX_DEGREE, example = E_ANNEX_DEGREE)
    @Length(max = 200000, message = M_ANNEX_DEGREE_MAX)
    private String annexDegree;

    @ApiModelProperty(notes = N_ANNEX_HOUSEHOLD, example = E_ANNEX_HOUSEHOLD)
    @Length(max = 200000, message = M_ANNEX_HOUSEHOLD_MAX)
    private String annexHousehold;

    @ApiModelProperty(notes = N_ANNEX_SALARY_CARD, example = E_ANNEX_SALARY_CARD)
    @Length(max = 200000, message = M_ANNEX_SALARY_CARD_MAX)
    private String annexSalaryCard;

    @ApiModelProperty(notes = N_ANNEX_SOC_CARD, example = E_ANNEX_SOC_CARD)
    @Length(max = 200000, message = M_ANNEX_SOC_CARD_MAX)
    private String annexSocCard;

    @ApiModelProperty(notes = N_ANNEX_PF_CARD, example = E_ANNEX_PF_CARD)
    @Length(max = 200000, message = M_ANNEX_PF_CARD_MAX)
    private String annexPfCard;

    @ApiModelProperty(notes = N_ANNEX_PRACTISING, example = E_ANNEX_PRACTISING)
    @Length(max = 200000, message = M_ANNEX_PRACTISING_MAX)
    private String annexPractising;

    @ApiModelProperty(notes = N_ANNEX_REWARD, example = E_ANNEX_REWARD)
    @Length(max = 200000, message = M_ANNEX_REWARD_MAX)
    private String annexReward;

    @ApiModelProperty(notes = N_ANNEX_NO_CRIMINAL, example = E_ANNEX_NO_CRIMINAL)
    @Length(max = 200000, message = M_ANNEX_NO_CRIMINAL_MAX)
    private String annexNoCriminal;

    @ApiModelProperty(notes = N_ANNEX_LABOR_CONTRACT, example = E_ANNEX_LABOR_CONTRACT)
    @Length(max = 200000, message = M_ANNEX_LABOR_CONTRACT_MAX)
    private String annexLaborContract;

    @ApiModelProperty(notes = N_ANNEX_LAST_LEAVE_CERT, example = E_ANNEX_LAST_LEAVE_CERT)
    @Length(max = 200000, message = M_ANNEX_LAST_LEAVE_CERT_MAX)
    private String annexLastLeaveCert;

    @ApiModelProperty(notes = N_ANNEX_ONB_CHECKUP, example = E_ANNEX_ONB_CHECKUP)
    @Length(max = 200000, message = M_ANNEX_ONB_CHECKUP_MAX)
    private String annexOnbCheckup;

    @ApiModelProperty(notes = N_ANNEX_ONB_RESUME, example = E_ANNEX_ONB_RESUME)
    @Length(max = 200000, message = M_ANNEX_ONB_RESUME_MAX)
    private String annexOnbResume;

    @ApiModelProperty(notes = N_ANNEX_WORK_APPLY, example = E_ANNEX_WORK_APPLY)
    @Length(max = 200000, message = M_ANNEX_WORK_APPLY_MAX)
    private String annexWorkApply;

    @ApiModelProperty(notes = N_ANNEX_ADJUST_NOTICE, example = E_ANNEX_ADJUST_NOTICE)
    @Length(max = 200000, message = M_ANNEX_ADJUST_NOTICE_MAX)
    private String annexAdjustNotice;

    @ApiModelProperty(notes = N_ANNEX_PERSONAL_CHANGE, example = E_ANNEX_PERSONAL_CHANGE)
    @Length(max = 200000, message = M_ANNEX_PERSONAL_CHANGE_MAX)
    private String annexPersonalChange;

    @ApiModelProperty(notes = N_ANNEX_SOC_TRANSFER, example = E_ANNEX_SOC_TRANSFER)
    @Length(max = 200000, message = M_ANNEX_SOC_TRANSFER_MAX)
    private String annexSocTransfer;

    @ApiModelProperty(notes = N_ANNEX_PERFORMANCE_REPORT, example = E_ANNEX_PERFORMANCE_REPORT)
    @Length(max = 200000, message = M_ANNEX_PERFORMANCE_REPORT_MAX)
    private String annexPerformanceReport;

    @ApiModelProperty(notes = N_ANNEX_NO_PREGNANT, example = E_ANNEX_NO_PREGNANT)
    @Length(max = 200000, message = M_ANNEX_NO_PREGNANT_MAX)
    private String annexNoPregnant;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_APPRO, example = E_ANNEX_LEAVE_APPRO)
    @Length(max = 200000, message = M_ANNEX_LEAVE_APPRO_MAX)
    private String annexLeaveAppro;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_CERT, example = E_ANNEX_LEAVE_CERT)
    @Length(max = 200000, message = M_ANNEX_LEAVE_CERT_MAX)
    private String annexLeaveCert;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_APPLY, example = E_ANNEX_LEAVE_APPLY)
    @Length(max = 200000, message = M_ANNEX_LEAVE_APPLY_MAX)
    private String annexLeaveApply;

    @ApiModelProperty(notes = N_ANNEX_HANDOVER_TABLE, example = E_ANNEX_HANDOVER_TABLE)
    @Length(max = 200000, message = M_ANNEX_HANDOVER_TABLE_MAX)
    private String annexHandoverTable;

    @ApiModelProperty(notes = N_FAMILY_NAME, example = E_FAMILY_NAME)
    @Length(max = 255, message = M_FAMILY_NAME_MAX)
    private String familyName;

    @ApiModelProperty(notes = N_FAMILY_PHONE, example = E_FAMILY_PHONE)
    @Length(max = 255, message = M_FAMILY_PHONE_MAX)
    private String familyPhone;

    @ApiModelProperty(notes = N_FAMILY_RELATION, example = E_FAMILY_RELATION)
    @Length(max = 255, message = M_FAMILY_RELATION_MAX)
    private String familyRelation;

    @ApiModelProperty(notes = N_FAMILY_WORK_UNIT, example = E_FAMILY_WORK_UNIT)
    @Length(max = 255, message = M_FAMILY_WORK_UNIT_MAX)
    private String familyWorkUnit;

    @ApiModelProperty(notes = N_CONTACTS_NAME, example = E_CONTACTS_NAME)
    @Length(max = 255, message = M_CONTACTS_NAME_MAX)
    private String contactsName;

    @ApiModelProperty(notes = N_CONTACTS_PHONE, example = E_CONTACTS_PHONE)
    @Length(max = 255, message = M_CONTACTS_PHONE_MAX)
    private String contactsPhone;

    @ApiModelProperty(notes = N_CONTACTS_RELATION, example = E_CONTACTS_RELATION)
    @Length(max = 255, message = M_CONTACTS_RELATION_MAX)
    private String contactsRelation;

    @ApiModelProperty(notes = N_CONTACTS_ADDRESS, example = E_CONTACTS_ADDRESS)
    @Length(max = 255, message = M_CONTACTS_ADDRESS_MAX)
    private String contactsAddress;

    @ApiModelProperty(notes = N_BANK_CARD, example = E_BANK_CARD)
    @Length(max = 255, message = M_BANK_CARD_MAX)
    private String bankCard;

    @ApiModelProperty(notes = N_BANK_NAME, example = E_BANK_NAME)
    @Length(max = 255, message = M_BANK_NAME_MAX)
    private String bankName;

    @ApiModelProperty(notes = N_BANK_PLACE, example = E_BANK_PLACE)
    @Length(max = 255, message = M_BANK_PLACE_MAX)
    private String bankPlace;

    @ApiModelProperty(notes = N_BANK_CARD_BRANCH, example = E_BANK_CARD_BRANCH)
    @Length(max = 255, message = M_BANK_CARD_BRANCH_MAX)
    private String bankCardBranch;

    @ApiModelProperty(notes = N_IS_FIRST_SOC, example = E_IS_FIRST_SOC)
    private Boolean isFirstSoc;

    @ApiModelProperty(notes = N_SOC_CARD, example = E_SOC_CARD)
    @Length(max = 50, message = M_SOC_CARD_MAX)
    private String socCard;

    @ApiModelProperty(notes = N_IS_FIRST_PF, example = E_IS_FIRST_PF)
    private Boolean isFirstPf;

    @ApiModelProperty(notes = N_PF_CARD, example = E_PF_CARD)
    @Length(max = 50, message = M_PF_CARD_MAX)
    private String pfCard;

    @ApiModelProperty(notes = N_STARTPAYMENTDATE, example = E_STARTPAYMENTDATE)
    @Length(max = 50, message = M_STARTPAYMENTDATE_MAX)
    private String startPaymentDate;

    @ApiModelProperty(notes = N_INSUREDCITY, example = E_INSUREDCITY)
    @Length(max = 50, message = M_INSUREDCITY_MAX)
    private String insuredCity;

    @ApiModelProperty(notes = "自定义字段")
    private List<AddEmpFieldDTO> addEmpFieldList;

    @ApiModelProperty(notes = "标志位，为1时，新增预登记不做记录")
    private Integer flag;

}

